<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    <title>Document</title>
</head>
<body>
    <script>
        // 创建一个Person类
        class Person{

//构造器中的this指向的是  实例化对象
            constructor(name,age){
                this.name=name
                this.age=age
            }
   
//speak方法放在了  类的原型对象中 _proto_ 供实例使用

// 通过Person实例调用speak方法 speak中的this就是Person实例
        speak(){
            console.log(`我叫${this.name},我的年龄是${this.age}`)
        }
        
     }

// 创建一个Person实例化对象
        // const  p1=new Person("xixi",18)
        // const p2=new Person("lala",19)

        // console.log(p1)
        // console.log(p2)

        // p1.speak()
        // p2.speak()

        class Student extends Person{

            constructor(name,age,grade){
              super(name,age) 
              this.grade=grade 
            }



        }

        const s1=new Student("xiao",15,"gaoyi")
        console.log(s1)
// student本身输出不带有构造函数speak()  让原型对象（每一个构造函数都有一个原型对象）的值，等于另一个类型的实例，即实现了继承；
// 另外一个类型的原型再指向第三个类型的实例，以此类推，也就形成了一个原型链
        s1.speak()
        </script>
</body>
</html>